package com.cskaoyan.method;

/*
       方法重载的：是方便调用方法
       除了两数求和之外，我们还需要三数求和，四数求和...., 对于使用者而言，使用我们定义的方法
       必须知道，每个方法具体的功能(记住)，才知道要调用的是哪个方法，以及调用，对于使用者来说是不友好的

       如何让使用者方便使用呢？ 所有的求和方法，定义成相同的名字, 给每个方法对应的参数即可

      方法重载(overload)
          在同一个类中，允许存在一个以上的同名方法，只要它们的 （参数个数\参数类型不同\参数顺序不同)
          a. 参数个数
          b. 参数类型
          c. 参数顺序(不是指变量名的顺序，而是值参数类型的顺序)

      为什么方法重载要满足以上条件? 因为java语言需要区分出这些同名方法
      java语言通过什么来区分不同的方法呢？ 方法签名 = 方法名 + 方法参数列表
      比如 public static int add(int a, int b)的方法签名  add(int,int)


      java语言区分同名方法为啥没有考虑方法返回值呢？
        因为如果我们使用直接调用，对于有返回值的方法就无法区分了(前提是，只考虑方法返回值的不同)

 */
public class Demo3Overload {

    public static void main(String[] args) {

        // 重载方法的调用

        // 方法1 两整数求和
        int a = 10;
        int b = 20;
//        int r = add(a, b);
//        System.out.println(r);

        // 方法2 三整数求和
        int add = add(10, 20, 30);
        System.out.println(add);

        // 考虑方法返回值
        // 一种有返回值的调用方式
        //double d = first(10, 20);

        //first(10,0);

    }

    // 方法1和方法2方法参数个数不同
    // 方法1
    public static int add(int a, int b) {
        System.out.println("add(int a, int b)");
        int result = a + b;
        return result;
    }

//    public static int add (int b, int a) {
//        int result = a + b;
//        return result;
//    }

    // 方法2
    public static int add(int a, int b, int c) {
        System.out.println("add(int a, int b, int c)");
        return add(a, b) + c;
    }

    // 方法2和方法3，参数类型不同
    // 方法3
    public static double add(double a, double b, double c) {
        return a + b + c;
    }

    // 参数顺序不同
    public static double add (int a, double b) {
        return a + b;
    }

    public static double add (double a, int b) {
        return a + b;
    }

    // 为啥没有考虑方法返回值
//    public static int first(int a, int b) {
//        return a + b;
//    }
//
//    public static double first(int a, int b) {
//        return a + b;
//    }

}
